home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 22 / AACD 22.iso / AACD / Programming / RxMUI / Examples / SendMsgFun.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  2001-05-24  |  4.1 KB  |  142 lines

  1. /* SendMsgFun 1.1 (11.11.2000) */
  2.  
  3. signal on halt
  4. signal on break_c
  5. signal on break_d
  6. signal on syntax
  7. signal on error
  8.  
  9. call init
  10. call start()
  11. exit
  12.  
  13. /***************************************************************************/
  14. init: procedure expose global. var.
  15.     call VarToStem("var.#?")
  16.     global.MacroNotify=var.MacroNotify
  17.     call MacroNotifyJoin(global.MacroNotify)
  18.     global.done=1
  19.     return
  20. /***************************************************************************/
  21. start: procedure expose global. var.
  22.  
  23.     global.eol="D0A"x
  24.  
  25.     call SetSocketBaseSingle("BREAKMASK",or(2**12,2**13))
  26.  
  27.     call info "Resolving <"var.Host">..."
  28.     remote.AddrAddr=resolve(var.Host)
  29.     if remote.AddrAddr==-1 then call err "Host <"var.Host"> not found."
  30.     remote.AddrPort=var.HostPort
  31.  
  32.     global.sock=socket("inet","stream")
  33.     if global.sock<0 then call err "Can't create my socket."
  34.  
  35.     call info "Connecting to <"var.Host":"var.HostPort">..."
  36.     res=connect(global.sock,"remote")
  37.     if res<0 then call err "Can't connect to <"var.Host":"var.HostPort"> ("ErrorString()")"
  38.  
  39.     if GetSockName(global.sock,"locale")<0 then call err("Not enogh memory")
  40.  
  41.     call info("Entering...")
  42.     call rec
  43.  
  44.     call info("Sending message...")
  45.  
  46.     msg=,
  47.     "Message-ID: <SendMsg"time(s)"@"locale.addraddr">" || global.eol ||,
  48.     "From:" var.Name "<"var.EMail">" || global.eol ||,
  49.     "Subject:" var.Subject || global.eol || ,
  50.     "Date:" GMTInetDate() || global.eol
  51.  
  52.     if var.News then do
  53.  
  54.         call sen "POST"
  55.         call rec
  56.  
  57.         msg=msg || ,
  58.         "Newsgroups:" var.To || global.eol ||,
  59.         "X-Newsposter: sendmsg/2.0" global.eol
  60.     end
  61.     else do
  62.         call sen "MAIL FROM: <"var.EMail">"
  63.         call rec
  64.  
  65.         call sen "RCPT TO: <"var.To">"
  66.         call rec
  67.  
  68.         call sen "DATA"
  69.         call rec
  70.  
  71.         msg=msg ||,
  72.         "To: <"var.To">" || global.eol ||,
  73.         "X-Mailer: sendmsg/1.0"
  74.     end
  75.  
  76.     call sen msg
  77.  
  78.     call sen var.Text
  79.  
  80.     call sen global.eol || "."
  81.     call rec
  82.  
  83.     call sen "QUIT"
  84.     call rec
  85.  
  86.     call info("Done.")
  87.  
  88.     return
  89. /***********************************************************************/
  90. sen: procedure expose global.
  91. parse arg string
  92.     string=string || global.eol
  93.     if send(global.sock,string)~=length(string) then call err("Send error" ErrorString())
  94.     return
  95. /***********************************************************************/
  96. rec: procedure expose global.
  97.     if recv(global.sock,"BUF",256)<0 then call err("Recv error" ErrorString())
  98.     parse var BUF code rest (global.eol)
  99.     if code>=400 then call err("Error from server: ("code")"rest)
  100.     return
  101. /***********************************************************************/
  102. GMTInetDate: procedure expose global.
  103.     m.1="Jan";m.2="Feb";m.3="Mar";m.4="Apr";m.5="May";m.6="Jun";m.7="Jul";m.8="Aug";m.9="Sep";m.10="Oct";m.11="Nov";m.12="Dec"
  104.     call GetDate("D","GMT")
  105.     parse value(FormatDate("D","%d %m %Y %H:%M:%S")) with i j rest
  106.     j=j%1
  107.     return i m.j || rest
  108. /***************************************************************************/
  109. info: procedure expose global.
  110. parse arg msg
  111.     call MacroNotifyInsertEvent(global.MacroNotify,"INFO",msg)
  112.     return
  113. /***************************************************************************/
  114. err: procedure expose global.
  115. parse arg msg,err
  116.     call info(msg)
  117.     exit
  118. /***************************************************************************/
  119. halt:
  120. break_c:
  121. break_d:
  122.     call CheckInit
  123.     call err "Interrupted"
  124. /***************************************************************************/
  125. syntax:
  126.     call CheckInit
  127.     call err "Syntax error" rc "at line" sigl":" ErrorText(rc)
  128. /***************************************************************************/
  129. error:
  130.     call CheckInit
  131.     call err "Error" rc "at line" sigl":" ErrorText(rc)
  132. /***************************************************************************/
  133. CheckInit:
  134.     if global.done~=1 then do
  135.         call VarToStem("var.#?")
  136.         call MacroNotifyJoin(var.MacroNotify)
  137.         global.MacroNotify=var.MacroNotify
  138.         global.done=1
  139.     end
  140.     return
  141. /***************************************************************************/
  142.